package com.wwdx.service;

import com.wwdx.model.WwdxOrderModel;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author liguoliang
 */
public interface WwdxOrderServiceI extends BaseServiceI<WwdxOrderModel>{

    /**
     * 查询订单数量
     * @param model 查询参数
     * @return 订单数量
     */
    Long selectModelCount(WwdxOrderModel model);

    /**
     * 查询订单列表
     * @param model 查询参数
     * @param page 分页参数
     * @param rows 分页参数
     * @return 订单列表
     */
    List<WwdxOrderModel> selectModelList(WwdxOrderModel model, Integer page,Integer rows);

    /**
     * 订单业务处理
     * @param orderModels 订单列表
     * @return 订单列表
     */
    List<WwdxOrderModel> excute(List<WwdxOrderModel> orderModels);

    /**
     * 查询订单号
     * @param orderno 订单号ID
     * @return 订单信息
     */
    WwdxOrderModel getByOrderNo(String orderno);

    /**
     * 产品是否购买
     * @param productid 产品ID
     * @param unionid 用户业务ID
     * @return 1 是 0 否
     */
    Integer isorder(Long productid, String unionid);

    /**
     * 产品是否存在书架
     * @param productid 产品ID
     * @param unionid 用户业务ID
     * @return 1 是 0 否
     */
    Integer isbookshelf(Long productid,String unionid);

    /**
     * 书架列表（包括已购买和书架书籍）
     * @param unionid 用户业务ID
     * @return 书架列表
     */
    List<Object> bookshelfList(String unionid);

    /**
     * 将已购买数据写入缓存
     * @param unionId 用户业务ID
     * @param productId 产品ID
     * @param type 类型{@link WwdxOrderModel#type}
     */
    void purchase(String unionId,Long productId,Integer type);

    /**
     * 商户分销产品收入金额与订单人数
     * @param merchantId 商户ID
     * @param productId 产品Id
     * @param date 时间
     */
    MerchantProductStatisticsDTO getMerchantProductDTO(String merchantId,Long productId,Date date);

    @Data
    @AllArgsConstructor
    class MerchantProductStatisticsDTO{
        /**
         * 订单金额
         */
        private BigDecimal total;
        /**
         * 订单人数
         */
        private Long count;
    }
}